package cn.edu.cug.cs.gtl.docsrv.img.manager;

import cn.edu.cug.cs.gtl.docsrv.doc.DocManager;
import cn.edu.cug.cs.gtl.mybatis.Session;
import cn.edu.cug.cs.gtl.mybatis.mapper.doc.DocAll;
import cn.edu.cug.cs.gtl.mybatis.mapper.img.ImgAll;
import cn.edu.cug.cs.gtl.mybatis.mapper.img.ImgAllMapper;
import cn.edu.cug.cs.gtl.mybatis.mapper.img.ImgItem;
import cn.edu.cug.cs.gtl.mybatis.mapper.img.ImgItemMapper;
import cn.edu.cug.cs.gtl.net.ftp.client.ClientFTP;

import cn.edu.cug.cs.gtl.protos.TimeValue;


import java.io.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 基于关系数据库Oracle+FTP实现的文档数据管理器
 * DOC_ITEM表中存放文档数据的条目信息
 * FTP Server中存放文档文件
 * 通过DOC_ITEM表中的DOC_URL指向服务器中的文件全名
 */
public class FTPImgManager  {
//
//    ClientFTP clientFTP;
//
//    /**
//     * @param session
//     * @param ftp
//     */
//    public FTPImgManager(Session session, ClientFTP ftp) {
//        super(session);
//        clientFTP = ftp;
//    }
//
//    @Override
//    public List<ImgAll> extractImgDocument(DocManager docManager, TimeValue begin, TimeValue end) {
//        //ftp url:     ftp://124.71.9.22:21/remote/Dir/remoteFileName
//        List<ImgAll> res = new ArrayList<>();
//        List<DocAll> docAllList = docManager.queryByAppendDate(begin, end);
//        for (DocAll docAll : docAllList) {
//            ImgAll imgAll = new ImgAll();
//            setImgAllFromDocAll(docAll);
//            extractImgAllByFTP(imgAll);
//            res.add(imgAll);
//        }
//        return res;
//    }
//
//    @Override
//    public ImgAll extractImgDocument(DocManager docManager, String title, String version) {
//        List<DocAll> docAllList = docManager.queryByTitle(title);
//        for (DocAll docAll : docAllList) {
//            if (docAll.getDocVersion().equals(version)) {
//                ImgAll imgAll = new ImgAll();
//                setImgAllFromDocAll(docAll);
//                extractImgAllByFTP(imgAll);
//                return imgAll;
//            }
//        }
//        return null;
//    }
//
//    @Override
//    public ImgAll queryByImgInternalId(BigDecimal imgInternalId) {
//        return null;
//    }
//
//    @Override
//    public List<ImgAll> queryByEnTitle(String imgEnTitle) {
//        return null;
//    }
//
//    @Override
//    public List<ImgAll> queryByComment(String imgCnTitle) {
//        return null;
//    }
//
//    @Override
//    public List<ImgAll> queryByType(String imgType) {
//        return null;
//    }
//
//    @Override
//    public List<ImgAll> queryByAppendDate(TimeValue begin, TimeValue end) {
//        return null;
//    }
//
//    @Override
//    public ImgAll query(Map<String, Object> parameters) {
//        return null;
//    }
//
//    public ImgAll extractImgAllByFTP(ImgAll imgAll) {
//        StringBuilder stringBuilder = new StringBuilder();
//        String[] ss = imgAll.getImgUrl().split("/");
//        String remoteFileName = ss[ss.length - 1];
//        for (int i = 3; i < ss.length - 1; i++) {
//            stringBuilder.append("/");
//            stringBuilder.append(ss[i]);
//        }
//        String remoteDir = stringBuilder.toString();
//        byte[] bytes = null;
//        try {
//            bytes = clientFTP.downloadBytes(remoteDir, remoteFileName);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        imgAll.setImgRawBytes(bytes);
//        return imgAll;
//    }
//
//
//
//
//    @Override
//    public List<ImgAll> queryS(Map<String, Object> parameters) {
//        return null;
//    }
//
//    /**
//     * 将imgDoc插入图像库,对应SHP_ALL数据表
//     *
//     * @param imgAll 图像文档
//     * @return 成功返回true, 否则返回false
//     */
//    @Override
//    public boolean insert(ImgAll imgAll) {
//        ImgAllMapper imgAllMapper = session.getMapper(ImgAllMapper.class);
//        if (imgAll.getImgInternalId() == null) {
//            //imgAll.setImgInternalId(imgAllMapper.nextImgInternalId());
//        }
//        byte[] bytes = imgAll.getImgRawBytes();
//        String docUrl = imgAll.getImgUrl();
//        String[] ss = docUrl.split("/");
//        String remoteDir;
//        String remoteFileName = ss[ss.length - 1];
//        StringBuilder stringBuilder = new StringBuilder();
//        for (int i = 3; i < ss.length - 1; i++) {
//            stringBuilder.append("/");
//            stringBuilder.append(ss[i]);
//        }
//        remoteDir = stringBuilder.toString();
//        try {
//            clientFTP.uploadBytes(bytes, remoteDir, remoteFileName);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        ImgItem imgItem = setImgItemFromImgAll(imgAll);
//        ImgItemMapper imgItemMapper = session.getMapper(ImgItemMapper.class);
//        imgItemMapper.insert(imgItem);
//        session.commit();
//        return true;
//    }
//
//
//    /**
//     * 读取本地目录中的所有图像文档，将其插入图像库中，同时插入文档库中
//     *
//     * @param localDir   本地目录
//     * @param docManager 文档数据管理器
//     * @return
//     */
//    @Override
//    public boolean insert(String localDir, DocManager docManager) {
//        try {
//            clientFTP.uploadFolder(localDir);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        File file = new File(localDir);
//        if (file.isDirectory()) {
//            File[] files = file.listFiles();
//            for (File f : files) {
//                if (f.getName().endsWith("img") || f.getName().endsWith("shx") || f.getName().endsWith("dbf")) {
//                    ImgAll imgAll = new ImgAll();
//                    //imgAll.setImgInternalId(new ImgAllMapper().nextImgInternalId());
//                    imgAll.setImgCreateDate(new Date());
//                    String[] ss = localDir.split("/");
//                    imgAll.setImgUrl("ftp://124.71.9.22:21/" + ss[ss.length - 1]);
//                    imgAll.setImgCnTitle(f.getName());
//                    FileInputStream fileInputStream;
//                    ByteArrayOutputStream out;
//                    try {
//                        fileInputStream = new FileInputStream(f);
//                        out = new ByteArrayOutputStream(1000);
//                        byte[] b = new byte[1000];
//                        int n;
//                        while ((n = fileInputStream.read(b)) != -1) {
//                            out.write(b, 0, n);
//                        }
//                        imgAll.setImgRawBytes(b);
//                    } catch (FileNotFoundException e) {
//                        e.printStackTrace();
//                    } catch (IOException e) {
//                        e.printStackTrace();
//                    }
//                    insert(imgAll);
//
//                }
//
//            }
//        }
//        return true;
//    }
}
